// API配置文件
// 可根据环境修改域名配置

// API基础域名配置
export const API_CONFIG = {
	// 开发环境域名
	development: 'http://yxz.com/',
	
	// 生产环境域名
	production: 'http://mancang.xyz/',
	
	// 当前使用的环境（可根据需要切换）
	current: 'development',
	
	// 初始化接口（固定域名，用于获取动态域名）
	//initUrl: 'http://yxz.com/api/common/getInit'
	initUrl: 'http://8.155.12.252/api/common/getInit'
};

// 动态域名缓存配置
const CACHE_KEY = 'dynamic_api_domain';
const CACHE_TIME_KEY = 'dynamic_api_domain_time';
const CACHE_DURATION = 10 * 60 * 1000; // 10分钟缓存

/**
 * 获取缓存的动态域名
 * @returns {string|null} 返回缓存的域名，如果缓存失效则返回null
 */
const getCachedDomain = () => {
	try {
		const cachedDomain = uni.getStorageSync(CACHE_KEY);
		const cachedTime = uni.getStorageSync(CACHE_TIME_KEY);
		
		if (!cachedDomain || !cachedTime) {
			return null;
		}
		
		const now = Date.now();
		if (now - cachedTime > CACHE_DURATION) {
			console.log('动态域名缓存已过期');
			return null;
		}
		
		console.log('使用缓存的动态域名:', cachedDomain);
		return cachedDomain;
	} catch (error) {
		console.error('获取缓存域名失败:', error);
		return null;
	}
};

/**
 * 设置动态域名缓存
 * @param {string} domain 要缓存的域名
 */
const setCachedDomain = (domain) => {
	try {
		uni.setStorageSync(CACHE_KEY, domain);
		uni.setStorageSync(CACHE_TIME_KEY, Date.now());
		console.log('动态域名已缓存:', domain);
	} catch (error) {
		console.error('缓存域名失败:', error);
	}
};

/**
 * 从初始化接口获取动态域名
 * @returns {Promise<string>} 返回动态域名
 */
export const fetchDynamicDomain = async () => {
	try {
		console.log('正在请求初始化接口获取动态域名...');
		
		const response = await uni.request({
			url: API_CONFIG.initUrl,
			method: 'GET',
			timeout: 10000
		});
		
		// 检查HTTP状态
		if (response.statusCode !== 200) {
			throw new Error(`HTTP错误: ${response.statusCode}`);
		}
		
		const data = response.data;
		
		// 检查业务状态码
		if (data.code !== 1) {
			throw new Error(data.msg || '获取动态域名失败');
		}
		
		// 验证返回的域名
		if (!data.data || typeof data.data !== 'string') {
			throw new Error('返回的域名格式错误');
		}
		
		let domain = data.data;
		
		// 确保域名以 / 结尾
		if (!domain.endsWith('/')) {
			domain += '/';
		}
		
		console.log('成功获取动态域名:', domain);
		
		// 缓存域名
		setCachedDomain(domain);
		
		return domain;
		
	} catch (error) {
		console.error('获取动态域名失败:', error);
		
		// 返回默认域名作为降级方案
		const defaultDomain = API_CONFIG[API_CONFIG.current];
		console.log('使用默认域名作为降级方案:', defaultDomain);
		return defaultDomain;
	}
};

/**
 * 初始化动态域名（在应用启动时调用）
 * @returns {Promise<void>}
 */
export const initDynamicDomain = async () => {
	// 先检查缓存
	const cachedDomain = getCachedDomain();
	if (cachedDomain) {
		return; // 缓存有效，无需重新获取
	}
	
	// 缓存失效，重新获取
	await fetchDynamicDomain();
};

/**
 * 清除动态域名缓存
 */
export const clearDomainCache = () => {
	try {
		uni.removeStorageSync(CACHE_KEY);
		uni.removeStorageSync(CACHE_TIME_KEY);
		console.log('动态域名缓存已清除');
	} catch (error) {
		console.error('清除域名缓存失败:', error);
	}
};

// 获取当前API基础URL（优先使用缓存的动态域名）
export const getBaseURL = () => {
	const cachedDomain = getCachedDomain();
	if (cachedDomain) {
		return cachedDomain;
	}
	
	// 缓存失效，使用默认域名
	return API_CONFIG[API_CONFIG.current];
};

// 塔罗牌相关接口路径
export const TAROT_API = {
	// 获取塔罗牌列表
	getList: '/api/tarot/index',
	// 获取塔罗牌详情
	getInfo: '/api/tarot/getTarotInfo',
	// 塔罗牌AI对话
	chat: '/api/deep/completions'
};

// 完整的API URL构建函数
export const buildApiUrl = (path) => {
	return `${getBaseURL()}${path}`;
};
